home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / include / xfs / xfs_ialloc.h < prev    next >
C/C++ Source or Header  |  2005-10-18  |  6KB  |  185 lines

  1. /*
  2.  * Copyright (c) 2000 Silicon Graphics, Inc.  All Rights Reserved.
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify it
  5.  * under the terms of version 2 of the GNU General Public License as
  6.  * published by the Free Software Foundation.
  7.  *
  8.  * This program is distributed in the hope that it would be useful, but
  9.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11.  *
  12.  * Further, this software is distributed without any warranty that it is
  13.  * free of the rightful claim of any third person regarding infringement
  14.  * or the like.  Any license provided herein, whether implied or
  15.  * otherwise, applies only to this software file.  Patent licenses, if
  16.  * any, provided herein do not apply to combinations of this program with
  17.  * other software, or any other product whatsoever.
  18.  *
  19.  * You should have received a copy of the GNU General Public License along
  20.  * with this program; if not, write the Free Software Foundation, Inc., 59
  21.  * Temple Place - Suite 330, Boston MA 02111-1307, USA.
  22.  *
  23.  * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
  24.  * Mountain View, CA  94043, or:
  25.  *
  26.  * http://www.sgi.com
  27.  *
  28.  * For further information regarding this notice, see:
  29.  *
  30.  * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
  31.  */
  32. #ifndef __XFS_IALLOC_H__
  33. #define    __XFS_IALLOC_H__
  34.  
  35. struct xfs_buf;
  36. struct xfs_dinode;
  37. struct xfs_mount;
  38. struct xfs_trans;
  39.  
  40. /*
  41.  * Allocation parameters for inode allocation.
  42.  */
  43. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IALLOC_INODES)
  44. int xfs_ialloc_inodes(struct xfs_mount *mp);
  45. #define    XFS_IALLOC_INODES(mp)    xfs_ialloc_inodes(mp)
  46. #else
  47. #define    XFS_IALLOC_INODES(mp)    ((mp)->m_ialloc_inos)
  48. #endif
  49. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IALLOC_BLOCKS)
  50. xfs_extlen_t xfs_ialloc_blocks(struct xfs_mount *mp);
  51. #define    XFS_IALLOC_BLOCKS(mp)    xfs_ialloc_blocks(mp)
  52. #else
  53. #define    XFS_IALLOC_BLOCKS(mp)    ((mp)->m_ialloc_blks)
  54. #endif
  55.  
  56. /*
  57.  * For small block file systems, move inodes in clusters of this size.
  58.  * When we don't have a lot of memory, however, we go a bit smaller
  59.  * to reduce the number of AGI and ialloc btree blocks we need to keep
  60.  * around for xfs_dilocate().  We choose which one to use in
  61.  * xfs_mount_int().
  62.  */
  63. #define    XFS_INODE_BIG_CLUSTER_SIZE    8192
  64. #define    XFS_INODE_SMALL_CLUSTER_SIZE    4096
  65. #define    XFS_INODE_CLUSTER_SIZE(mp)    (mp)->m_inode_cluster_size
  66.  
  67. /*
  68.  * Make an inode pointer out of the buffer/offset.
  69.  */
  70. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_MAKE_IPTR)
  71. struct xfs_dinode *xfs_make_iptr(struct xfs_mount *mp, struct xfs_buf *b, int o);
  72. #define    XFS_MAKE_IPTR(mp,b,o)        xfs_make_iptr(mp,b,o)
  73. #else
  74. #define    XFS_MAKE_IPTR(mp,b,o) \
  75.     ((xfs_dinode_t *)(xfs_buf_offset(b, (o) << (mp)->m_sb.sb_inodelog)))
  76. #endif
  77.  
  78. /*
  79.  * Find a free (set) bit in the inode bitmask.
  80.  */
  81. #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_IALLOC_FIND_FREE)
  82. int xfs_ialloc_find_free(xfs_inofree_t *fp);
  83. #define    XFS_IALLOC_FIND_FREE(fp)    xfs_ialloc_find_free(fp)
  84. #else
  85. #define    XFS_IALLOC_FIND_FREE(fp)    xfs_lowbit64(*(fp))
  86. #endif
  87.  
  88.  
  89. #ifdef __KERNEL__
  90.  
  91. /*
  92.  * Prototypes for visible xfs_ialloc.c routines.
  93.  */
  94.  
  95. /*
  96.  * Allocate an inode on disk.
  97.  * Mode is used to tell whether the new inode will need space, and whether
  98.  * it is a directory.
  99.  *
  100.  * To work within the constraint of one allocation per transaction,
  101.  * xfs_dialloc() is designed to be called twice if it has to do an
  102.  * allocation to make more free inodes.  If an inode is
  103.  * available without an allocation, agbp would be set to the current
  104.  * agbp and alloc_done set to false.
  105.  * If an allocation needed to be done, agbp would be set to the
  106.  * inode header of the allocation group and alloc_done set to true.
  107.  * The caller should then commit the current transaction and allocate a new
  108.  * transaction.  xfs_dialloc() should then be called again with
  109.  * the agbp value returned from the previous call.
  110.  *
  111.  * Once we successfully pick an inode its number is returned and the
  112.  * on-disk data structures are updated.  The inode itself is not read
  113.  * in, since doing so would break ordering constraints with xfs_reclaim.
  114.  *
  115.  * *agbp should be set to NULL on the first call, *alloc_done set to FALSE.
  116.  */
  117. int                    /* error */
  118. xfs_dialloc(
  119.     struct xfs_trans *tp,        /* transaction pointer */
  120.     xfs_ino_t    parent,        /* parent inode (directory) */
  121.     mode_t        mode,        /* mode bits for new inode */
  122.     int        okalloc,    /* ok to allocate more space */
  123.     struct xfs_buf    **agbp,        /* buf for a.g. inode header */
  124.     boolean_t    *alloc_done,    /* an allocation was done to replenish
  125.                        the free inodes */
  126.     xfs_ino_t    *inop);        /* inode number allocated */
  127.  
  128. /*
  129.  * Free disk inode.  Carefully avoids touching the incore inode, all
  130.  * manipulations incore are the caller's responsibility.
  131.  * The on-disk inode is not changed by this operation, only the
  132.  * btree (free inode mask) is changed.
  133.  */
  134. int                    /* error */
  135. xfs_difree(
  136.     struct xfs_trans *tp,        /* transaction pointer */
  137.     xfs_ino_t    inode,        /* inode to be freed */
  138.     struct xfs_bmap_free *flist,    /* extents to free */
  139.     int        *delete,    /* set if inode cluster was deleted */
  140.     xfs_ino_t    *first_ino);    /* first inode in deleted cluster */
  141.  
  142. /*
  143.  * Return the location of the inode in bno/len/off,
  144.  * for mapping it into a buffer.
  145.  */
  146. int
  147. xfs_dilocate(
  148.     struct xfs_mount *mp,        /* file system mount structure */
  149.     struct xfs_trans *tp,        /* transaction pointer */
  150.     xfs_ino_t    ino,        /* inode to locate */
  151.     xfs_fsblock_t    *bno,        /* output: block containing inode */
  152.     int        *len,        /* output: num blocks in cluster*/
  153.     int        *off,        /* output: index in block of inode */
  154.     uint        flags);        /* flags for inode btree lookup */
  155.  
  156. /*
  157.  * Compute and fill in value of m_in_maxlevels.
  158.  */
  159. void
  160. xfs_ialloc_compute_maxlevels(
  161.     struct xfs_mount *mp);        /* file system mount structure */
  162.  
  163. /*
  164.  * Log specified fields for the ag hdr (inode section)
  165.  */
  166. void
  167. xfs_ialloc_log_agi(
  168.     struct xfs_trans *tp,        /* transaction pointer */
  169.     struct xfs_buf    *bp,        /* allocation group header buffer */
  170.     int        fields);    /* bitmask of fields to log */
  171.  
  172. /*
  173.  * Read in the allocation group header (inode allocation section)
  174.  */
  175. int                    /* error */
  176. xfs_ialloc_read_agi(
  177.     struct xfs_mount *mp,        /* file system mount structure */
  178.     struct xfs_trans *tp,        /* transaction pointer */
  179.     xfs_agnumber_t    agno,        /* allocation group number */
  180.     struct xfs_buf    **bpp);        /* allocation group hdr buf */
  181.  
  182. #endif    /* __KERNEL__ */
  183.  
  184. #endif    /* __XFS_IALLOC_H__ */
  185.